"""
给定一个整数数组 nums 和一个整数目标值 target，请你在该数组中找出 和为目标值 target  的那 两个 整数，并返回它们的数组下标。

你可以假设每种输入只会对应一个答案，并且你不能使用两次相同的元素。

你可以按任意顺序返回答案。
"""


def two_num_sum_on2(arr: [int], target: int) -> [int, int]:
    """
    1. 计算两数之和 O(N²)

    :param arr:
    :param target:
    :return:
    """
    length = len(arr)
    for i in range(length - 1):
        for j in range(i + 1, length):
            n = arr[i] + arr[j]
            if n == target:
                return [i, j]
    return []


def two_num_sum_on(arr: [int], target: int) -> [int, int]:
    """
    2. 计算两数之和 O(N)
    :param arr:
    :param target:
    :return:
    """
    num_map = {}
    for index, element in enumerate(arr):
        other_num = target - element
        if other_num in num_map:
            return [num_map[other_num], index]
        num_map[element] = index
    return []


res = two_num_sum_on2([3, 2, 4], 6)
print(f"{res}")
res = two_num_sum_on([3, 2, 4], 6)
print(f"{res}")
